iT邦幫忙

2023 iThome 鐵人賽

DAY 17
0
自我挑戰組

從0到有學習JavaScript系列 第 17

第三章 型別、值和變數-問題筆記 RegExp match()及跳脫字元

  • 分享至 

  • xImage
  •  

RegExp輸出的方式有哪些?

  1. 在正規表達式(RegExp)中,pattern常常和 exec() 和test()方法連用。
  2. 在字串(String)中,常常和match(), matchAll(), replace(), replaceAll(), search(), split()連用。

一、RegExp輸出的方式match():
公式:

match(regexp)
  1. 公式中的regexp,可以是一個正規表達式,或是含有使用symbol.match方法的物件。
  2. 如果regexp不是正規表達式,也不是使用symbol.match方法的物件,相當於使用new RegExp(regexp)方法,將內容自動轉型成正規表達式。
  3. 如果使用match() 又不給任何參數,就會得到一個空陣列[""],等同於match(/(?:)/)

用簡單例子,來說明match 搭配正規表達式物件:

const paragraph = 'The quick brown fox jumps over the lazy dog. It barked.';
const regex = /[A-Z]/g;
const found = paragraph.match(regex);

console.log(found);
// Expected output: Array ["T", "I"]

呈上面說明,用三種不同方法來說明match的情況:

  • 使用第一個說明,正規表達式:
const string = "Hello, World!";
const regex = /Hello/;
const result = string.match(regex);

console.log(result);     //['Hello', index: 0, input: 'Hello, World!', groups: undefined]
  • 使用第二個說明,自動轉換成正規表達式:
const pattern = "\\d+";   

// \\d+ 會在之後自動轉換為正規表達式,意思是:兩條反斜線`\\`為跳脫字元 (\\轉譯成正規表達式,為一條反斜線),轉譯成\d+,\d(代表0-9的數字),+號代表後面加上一個或是多個數字0-9。

// 一個字串,不是 RegExp ,也沒使用 Symbol.match 方法

const text = "12345";

const result = text.match(pattern);  //自動將pattern轉換成正規表達式
console.log(result);     

//['12345', index: 0, input: '12345', groups: undefined]

接續上面第二個說明,相當於使用new RegExp(regexp)方法,將內容自動轉型成正規表達式:

const pattern = "\\d+";
const text = "12345";
const regex = new RegExp(pattern);

const result = text.match(regex);
console.log(result);   

//['12345', index: 0, input: '12345', groups: undefined]

  • 使用第三個說明,不給任何參數,得到空陣列:
const str = "Nothing will come of nothing.";
str.match(); 

// returns [""]
//['', index: 0, input: 'Nothing will come of nothing.', groups: undefined]

Reference
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/match


上一篇
第三章 型別、值和變數-問題筆記 RegExp exec()
下一篇
第三章 型別、值和變數-問題筆記 RegExp match(), g, capturing group
系列文
從0到有學習JavaScript31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言